home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dspgroup / asms.arc / TONE.ASM < prev   
Encoding:
Assembly Source File  |  1987-09-14  |  5.9 KB  |  340 lines

  1.     org 0
  2.         b go
  3.     org 0FF0H
  4.     dw 2731
  5.         org 10H
  6. sine:    equ 0
  7. one:    equ 1
  8. freq:    equ 2
  9. phase:    equ 3
  10. maskl:    equ 6
  11. mask:    equ 7
  12. sinx:    equ 8
  13. cosx:    equ 9
  14. mone:    equ 11
  15. wkph:   equ 13
  16. masko:  equ 14
  17. mps:    equ 15
  18. siny:    equ 17
  19. mpc:    equ 18
  20. cosy:    equ 21
  21. cosine: equ 19
  22. coph:    equ 20
  23. sintbl: dw      0  ; coarse sine table
  24.        dw    804
  25.        dw   1607
  26.        dw   2410
  27.        dw   3211
  28.        dw   4011
  29.        dw   4807
  30.        dw   5601
  31.        dw   6392
  32.        dw   7179
  33.        dw   7961
  34.        dw   8739
  35.        dw   9511
  36.        dw  10278
  37.        dw  11038
  38.        dw  11792
  39.        dw  12539
  40.        dw  13278
  41.        dw  14009
  42.        dw  14732
  43.        dw  15446
  44.        dw  16150
  45.        dw  16845
  46.        dw  17530
  47.        dw  18204
  48.        dw  18867
  49.        dw  19519
  50.        dw  20159
  51.        dw  20787
  52.        dw  21402
  53.        dw  22004
  54.        dw  22594
  55.        dw  23169
  56.        dw  23731
  57.        dw  24278
  58.        dw  24811
  59.        dw  25329
  60.        dw  25831
  61.        dw  26318
  62.        dw  26789
  63.        dw  27244
  64.        dw  27683
  65.        dw  28105
  66.        dw  28510
  67.        dw  28897
  68.        dw  29268
  69.        dw  29621
  70.        dw  29955
  71.        dw  30272
  72.        dw  30571
  73.        dw  30851
  74.        dw  31113
  75.        dw  31356
  76.        dw  31580
  77.        dw  31785
  78.        dw  31970
  79.        dw  32137
  80.        dw  32284
  81.        dw  32412
  82.        dw  32520
  83.        dw  32609
  84.        dw  32678
  85.        dw  32727
  86.        dw  32757
  87.        dw  32767
  88. fines:  dw      0  ; fine tuning table
  89.        dw     12
  90.        dw     25
  91.        dw     37
  92.        dw     50
  93.        dw     62
  94.        dw     75
  95.        dw     87
  96.        dw    100
  97.        dw    113
  98.        dw    125
  99.        dw    138
  100.        dw    150
  101.        dw    163
  102.        dw    175
  103.        dw    188
  104.        dw    201
  105.        dw    213
  106.        dw    226
  107.        dw    238
  108.        dw    251
  109.        dw    263
  110.        dw    276
  111.        dw    289
  112.        dw    301
  113.        dw    314
  114.        dw    326
  115.        dw    339
  116.        dw    351
  117.        dw    364
  118.        dw    376
  119.        dw    389
  120.        dw    402
  121.        dw    414
  122.        dw    427
  123.        dw    439
  124.        dw    452
  125.        dw    464
  126.        dw    477
  127.        dw    490
  128.        dw    502
  129.        dw    515
  130.        dw    527
  131.        dw    540
  132.        dw    552
  133.        dw    565
  134.        dw    578
  135.        dw    590
  136.        dw    603
  137.        dw    615
  138.        dw    628
  139.        dw    640
  140.        dw    653
  141.        dw    665
  142.        dw    678
  143.        dw    691
  144.        dw    703
  145.        dw    716
  146.        dw    728
  147.        dw    741
  148.        dw    753
  149.        dw    766
  150.        dw    779
  151.        dw    791
  152. finec:     dw   32767
  153.        dw   32766
  154.        dw   32766
  155.        dw   32766
  156.        dw   32766
  157.        dw   32766
  158.        dw   32766
  159.        dw   32766
  160.        dw   32766
  161.        dw   32766
  162.        dw   32766
  163.        dw   32766
  164.        dw   32766
  165.        dw   32766
  166.        dw   32766
  167.        dw   32766
  168.        dw   32766
  169.        dw   32766
  170.        dw   32766
  171.        dw   32766
  172.        dw   32766
  173.        dw   32765
  174.        dw   32765
  175.        dw   32765
  176.        dw   32765
  177.        dw   32765
  178.        dw   32765
  179.        dw   32765
  180.        dw   32765
  181.        dw   32764
  182.        dw   32764
  183.        dw   32764
  184.        dw   32764
  185.        dw   32764
  186.        dw   32764
  187.        dw   32764
  188.        dw   32763
  189.        dw   32763
  190.        dw   32763
  191.        dw   32763
  192.        dw   32763
  193.        dw   32762
  194.        dw   32762
  195.        dw   32762
  196.        dw   32762
  197.        dw   32762
  198.        dw   32761
  199.        dw   32761
  200.        dw   32761
  201.        dw   32761
  202.        dw   32760
  203.        dw   32760
  204.        dw   32760
  205.        dw   32760
  206.        dw   32759
  207.        dw   32759
  208.        dw   32759
  209.        dw   32759
  210.        dw   32758
  211.        dw   32758
  212.        dw   32758
  213.        dw   32758
  214.        dw   32757
  215.        dw   32757
  216. go:    ldpk 0
  217.     lack one
  218.     sacl one
  219.     lac one,11
  220.     sacl masko
  221.     zac
  222.     sub one
  223.     sacl mone  ; make and store minus one
  224.     lac one,14
  225.     sub one
  226.     sacl mask  ; make and store mask for modulo 16384 phase arithmetic
  227.     lac one,6
  228.     sub one
  229.     sacl maskl ; make and store fine part of address mask;
  230.     zac
  231.     sacl phase
  232.     lac one,8
  233.     sub one
  234.     sacl freq
  235.     lac freq,4
  236.     tblr freq
  237. wait:    bioz fire    ; is it time for a new sample    
  238.     b wait       ; nope go wait in the corner
  239. fire:    out sine,pa4    ; send it out here so that timing is maintained
  240.              ; as the following routines have a variable length
  241.     lack one
  242.     sacl mps
  243.     sacl mpc
  244.     lac phase,0
  245. a:    sacl wkph  ;  store a working copy
  246.     lac wkph,4
  247.     subh one
  248.     blz getem  ;  is it in a quadrant bigger than first?
  249.     subh one
  250.     bgez thfr; is it in a quadrant greater than two?
  251.     lac 1,13  ;  nope so load pi
  252.     sub wkph  ;  subtract phase so that it maps back into 1st quad
  253.     sacl wkph ; store
  254.     lac mone  ; load -1
  255.     sacl mpc  ; store it in the cosine multiplier
  256.     b getem   ; go read tables
  257. thfr:    lac mone  ; multiplier for bottom half
  258.     sacl mps  ; store
  259.     lac wkph  ; 
  260.     sub one,13 ; map angle back to  upper half and go do it again
  261.     b a;
  262. getem:    lac wkph,10
  263.     sach coph
  264.     lack sintbl
  265.     add coph
  266.     tblr sinx
  267.     lac one,6
  268.     sub coph
  269.     sacl coph
  270.     lack sintbl
  271.     add coph
  272.     tblr cosx
  273.     lac wkph
  274.     and maskl
  275.     sacl coph
  276.     lack fines
  277.     add coph
  278.     tblr siny
  279.     lack finec
  280.     add coph
  281.     tblr cosy
  282.     zac
  283.     lt sinx
  284.     mpy cosy
  285.     lta siny
  286.     mpy cosx
  287.     apac
  288.     sach sine
  289.     lac 1,12
  290.     sub wkph
  291.     sacl wkph
  292.     lac wkph,10
  293.     sach coph
  294.     lack sintbl
  295.     add coph
  296.     tblr sinx
  297.     lac one,6
  298.     sub coph
  299.     sacl coph
  300.     lack sintbl
  301.     add coph
  302.     tblr cosx
  303.     lac wkph
  304.     and maskl
  305.     sacl coph
  306.     lack fines
  307.     add coph
  308.     tblr siny
  309.     lack finec
  310.     add coph
  311.     tblr cosy
  312.     zac
  313.     lt sinx
  314.     mpy cosy
  315.     lta siny
  316.     mpy cosx
  317.     apac
  318.     sach cosine
  319. mult:    lt mps
  320.     mpy sine
  321.     pac
  322.     sacl sine
  323.     mpy cosine
  324.     pac
  325.     sacl cosine
  326.     lt mpc
  327.     mpy cosine
  328.     pac
  329.     sacl cosine
  330.     lac cosine,5  ; move top twelve bits into high order word
  331.     addh masko ; add offset for ADC format;
  332.     sach sine,0  ; store output value
  333.     lac phase   ; get ready to add freq (measured in phase rotation
  334.             ; per sample)
  335.     add freq   ; add phase rotation
  336.     and mask    ; do mod 16384 arithmetic
  337.     sacl phase  ; store it
  338.     b wait        ; go output and then do it again
  339.     end
  340.